﻿//////#include<iostream>
//////using namespace std;
////
//////int main()
//////{
//////	int a = 0;
//////	std::cin >> a;
//////	std::cout << 15 << std::endl;
//////	return 0;
//////}
////
//////using namespace std;
//////int main()
//////{
//////	int a = 0;
//////	// 引用:b和c是a的别名
//////	int& b = a;
//////	int& c = a;
//////	//也可以给b取别名
//////	int& d = b;
//////	++d;
//////	cout << &a << endl;
//////	cout << &b << endl;
//////	cout << &c << endl;
//////	cout << &d << endl;
//////	return 0;
//////}
////
////#include<iostream>
////#include<assert.h>
////using namespace std;
////namespace zy
////{
////	typedef int STDataType;
////	typedef struct Stack
////	{
////		STDataType* a;
////		int top;
////		int capacity;
////	}ST;
////	void STInit(ST& rs, int n = 4)
////	{
////		rs.a = (STDataType*)malloc(n * sizeof(STDataType));
////		rs.top = 0;
////		rs.capacity = n;
////	}
////
////	// 栈顶
////	void STPush(ST& rs, STDataType x)
////	{
////		// 满了， 扩容
////		if (rs.top == rs.capacity)
////		{
////			printf("扩容\n");
////			int newcapacity = rs.capacity == 0 ? 4 : rs.capacity * 2;
////			STDataType* tmp = (STDataType*)realloc(rs.a, newcapacity * sizeof(STDataType));
////			if (tmp == NULL)
////			{
////				perror("realloc fail");
////				return;
////			}
////			rs.a = tmp;
////			rs.capacity = newcapacity;
////		}
////		rs.a[rs.top] = x;
////		rs.top++;
////	}
////
////	// int STTop(ST& rs)
////	int& STTop(ST& rs)//传引用返回
////	{
////		assert(rs.top > 0);
////		return rs.a[rs.top - 1];
////	}
////}
////
////
////int main()
////{
////	// 调用zy命名空间的Stack
////	zy::ST st1;
////	STInit(st1);
////	STPush(st1, 1);
////	STPush(st1, 2);
////	cout << STTop(st1) << endl;
////	//传引用返回的作用，返回值可修改，因为返回引用相当于返回的变量，而非常量。
////	STTop(st1) += 10;
////	cout << STTop(st1) << endl;
////	return 0;
////}
//
//#include<iostream>
//using namespace std;
//typedef struct SeqList
//{
//	int a[10];
//	int size;
//}SLT;
//// ⼀些主要⽤C代码实现版本数据结构教材中，使⽤C++中的引⽤替代指针传参，目的是简化程序，避开复杂的指针，但是很多同学没学过引⽤，导致⼀头雾⽔。
//void SeqPushBack(SLT& sl, int x)
//{}
//typedef struct ListNode
//{
//	int val;
//	struct ListNode* next;
//}LTNode, * PNode;
//// 指针变量也可以取别名，这⾥LTNode*& phead就是给指针变量取别名
//// 这样就不需要用⼆级指针了，相对而言简化了程序
////void ListPushBack(LTNode** phead, int x)
////void ListPushBack(LTNode*& phead, int x)
//void ListPushBack(PNode& phead, int x)//这里的PNode 就是 LTNode*
//{
//	PNode newnode = (PNode)malloc(sizeof(LTNode));
//	newnode->val = x;
//	newnode->next = NULL;
//	if (phead == NULL)
//	{
//		phead = newnode;
//	}
//	else
//	{
//		//...
//	}
//}
//int main()
//{
//	//LTNode* plist = NULL;
//	PNode plist = NULL;
//	ListPushBack(plist, 1);
//	return 0;
//}

#include<iostream>
using namespace std;
inline int Add(int x, int y)
{
	int ret = x + y;
	ret += 1;
	ret += 1;
	ret += 1;
	return ret;
}
int main()
{
	// 可以通过汇编观察程序是否展开
	// 有call Add语句就是没有展开，没有就是展开了
	int ret = Add(1, 2);
	cout << Add(1, 2) * 5 << endl;
	return 0;
}